home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 49 / Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso / -screenplay- / otherstuff / inform_lib610 / english.h next >
Text File  |  1999-11-29  |  36KB  |  882 lines

  1. ! ===========================================================================
  2. !   Inform Language Definition File: English 991106
  3. !
  4. !   (c) Graham Nelson 1997, 1998, 1999
  5. !
  6. !   Define the constant DIALECT_US before including "Parser" to
  7. !   obtain American English
  8. ! ---------------------------------------------------------------------------
  9. System_file;
  10. ! ---------------------------------------------------------------------------
  11. !   Part I.   Preliminaries
  12. ! ---------------------------------------------------------------------------
  13. Constant EnglishNaturalLanguage;   ! Needed to keep old pronouns mechanism
  14.  
  15. Class  CompassDirection
  16.   with article "the", number 0
  17.   has  scenery;
  18. Object Compass "compass" has concealed;
  19. IFNDEF WITHOUT_DIRECTIONS;
  20. CompassDirection -> n_obj "north wall"
  21.                     with name 'n//' 'north' 'wall',    door_dir n_to;
  22. CompassDirection -> s_obj "south wall"
  23.                     with name 's//' 'south' 'wall',    door_dir s_to;
  24. CompassDirection -> e_obj "east wall"
  25.                     with name 'e//' 'east' 'wall',     door_dir e_to;
  26. CompassDirection -> w_obj "west wall"
  27.                     with name 'w//' 'west' 'wall',     door_dir w_to;
  28. CompassDirection -> ne_obj "northeast wall"
  29.                     with name 'ne' 'northeast' 'wall', door_dir ne_to;
  30. CompassDirection -> nw_obj "northwest wall"
  31.                     with name 'nw' 'northwest' 'wall', door_dir nw_to;
  32. CompassDirection -> se_obj "southeast wall"
  33.                     with name 'se' 'southeast' 'wall', door_dir se_to;
  34. CompassDirection -> sw_obj "southwest wall"
  35.                     with name 'sw' 'southwest' 'wall', door_dir sw_to;
  36. CompassDirection -> u_obj "ceiling"
  37.                     with name 'u//' 'up' 'ceiling',    door_dir u_to;
  38. CompassDirection -> d_obj "floor"
  39.                     with name 'd//' 'down' 'floor',    door_dir d_to;
  40. ENDIF;
  41. CompassDirection -> out_obj "outside"
  42.                     with                               door_dir out_to;
  43. CompassDirection -> in_obj "inside"
  44.                     with                               door_dir in_to;
  45. ! ---------------------------------------------------------------------------
  46. !   Part II.   Vocabulary
  47. ! ---------------------------------------------------------------------------
  48. Constant AGAIN1__WD   = 'again';
  49. Constant AGAIN2__WD   = 'g//';
  50. Constant AGAIN3__WD   = 'again';
  51. Constant OOPS1__WD    = 'oops';
  52. Constant OOPS2__WD    = 'o//';
  53. Constant OOPS3__WD    = 'oops';
  54. Constant UNDO1__WD    = 'undo';
  55. Constant UNDO2__WD    = 'undo';
  56. Constant UNDO3__WD    = 'undo';
  57.  
  58. Constant ALL1__WD     = 'all';
  59. Constant ALL2__WD     = 'each';
  60. Constant ALL3__WD     = 'every';
  61. Constant ALL4__WD     = 'everything';
  62. Constant ALL5__WD     = 'both';
  63. Constant AND1__WD     = 'and';
  64. Constant AND2__WD     = 'and';
  65. Constant AND3__WD     = 'and';
  66. Constant BUT1__WD     = 'but';
  67. Constant BUT2__WD     = 'except';
  68. Constant BUT3__WD     = 'but';
  69. Constant ME1__WD      = 'me';
  70. Constant ME2__WD      = 'myself';
  71. Constant ME3__WD      = 'self';
  72. Constant OF1__WD      = 'of';
  73. Constant OF2__WD      = 'of';
  74. Constant OF3__WD      = 'of';
  75. Constant OF4__WD      = 'of';
  76. Constant OTHER1__WD   = 'another';
  77. Constant OTHER2__WD   = 'other';
  78. Constant OTHER3__WD   = 'other';
  79. Constant THEN1__WD    = 'then';
  80. Constant THEN2__WD    = 'then';
  81. Constant THEN3__WD    = 'then';
  82.  
  83. Constant NO1__WD      = 'n//';
  84. Constant NO2__WD      = 'no';
  85. Constant NO3__WD      = 'no';
  86. Constant YES1__WD     = 'y//';
  87. Constant YES2__WD     = 'yes';
  88. Constant YES3__WD     = 'yes';
  89.  
  90. Constant AMUSING__WD  = 'amusing';
  91. Constant FULLSCORE1__WD = 'fullscore';
  92. Constant FULLSCORE2__WD = 'full';
  93. Constant QUIT1__WD    = 'q//';
  94. Constant QUIT2__WD    = 'quit';
  95. Constant RESTART__WD  = 'restart';
  96. Constant RESTORE__WD  = 'restore';
  97.  
  98. Array LanguagePronouns table
  99.  
  100.    !  word       possible GNAs                   connected
  101.    !             to follow:                      to:
  102.    !             a     i
  103.    !             s  p  s  p
  104.    !             mfnmfnmfnmfn                 
  105.  
  106.       'it'     $$001000111000                    NULL
  107.       'him'    $$100000000000                    NULL
  108.       'her'    $$010000000000                    NULL
  109.       'them'   $$000111000111                    NULL;
  110.  
  111. Array LanguageDescriptors table
  112.  
  113.    !  word       possible GNAs   descriptor      connected
  114.    !             to follow:      type:           to:
  115.    !             a     i
  116.    !             s  p  s  p
  117.    !             mfnmfnmfnmfn                 
  118.  
  119.       'my'     $$111111111111    POSSESS_PK      0
  120.       'this'   $$111111111111    POSSESS_PK      0
  121.       'these'  $$000111000111    POSSESS_PK      0
  122.       'that'   $$111111111111    POSSESS_PK      1
  123.       'those'  $$000111000111    POSSESS_PK      1
  124.       'his'    $$111111111111    POSSESS_PK      'him'
  125.       'her'    $$111111111111    POSSESS_PK      'her'
  126.       'their'  $$111111111111    POSSESS_PK      'them'
  127.       'its'    $$111111111111    POSSESS_PK      'it'
  128.       'the'    $$111111111111    DEFART_PK       NULL
  129.       'a//'    $$111000111000    INDEFART_PK     NULL
  130.       'an'     $$111000111000    INDEFART_PK     NULL
  131.       'some'   $$000111000111    INDEFART_PK     NULL
  132.       'lit'    $$111111111111    light           NULL
  133.      'lighted' $$111111111111    light           NULL
  134.       'unlit'  $$111111111111    (-light)        NULL;
  135.  
  136. Array LanguageNumbers table
  137.     'one' 1 'two' 2 'three' 3 'four' 4 'five' 5
  138.     'six' 6 'seven' 7 'eight' 8 'nine' 9 'ten' 10
  139.     'eleven' 11 'twelve' 12 'thirteen' 13 'fourteen' 14 'fifteen' 15
  140.     'sixteen' 16 'seventeen' 17 'eighteen' 18 'nineteen' 19 'twenty' 20;
  141.  
  142. ! ---------------------------------------------------------------------------
  143. !   Part III.   Translation
  144. ! ---------------------------------------------------------------------------
  145.  
  146. [ LanguageToInformese x;
  147.   ! Insert a space before each hyphen and after each apostrophe.
  148.   for (x=2: x<2+buffer->1: x++) {
  149.       if (buffer->x == '-') LTI_Insert(x++, ' ');
  150.       if (buffer->x == ''') LTI_Insert(++x, ' ');
  151.   }
  152.   #ifdef DEBUG;
  153.   if (parser_trace >= 1) {
  154.       print "[ After LTI: '";
  155.       for (x=2: x<2+buffer->1: x++) print (char) buffer->x;
  156.       print "']^";
  157.   }
  158.   #endif;
  159. ];
  160.  
  161.  
  162. ! ---------------------------------------------------------------------------
  163. !   Part IV.   Printing
  164. ! ---------------------------------------------------------------------------
  165.  
  166. Constant LanguageAnimateGender   = male;
  167. Constant LanguageInanimateGender = neuter;
  168.  
  169. Constant LanguageContractionForms = 2;     ! English has two:
  170.                                            ! 0 = starting with a consonant
  171.                                            ! 1 = starting with a vowel
  172.  
  173. [ LanguageContraction text;
  174.   if (text->0 == 'a' or 'e' or 'i' or 'o' or 'u'
  175.                  or 'A' or 'E' or 'I' or 'O' or 'U') return 1;
  176.   return 0;
  177. ];
  178.  
  179. Array LanguageArticles -->
  180.  
  181.  !   Contraction form 0:     Contraction form 1:
  182.  !   Cdef   Def    Indef     Cdef   Def    Indef
  183.  
  184.      "The " "the " "a "      "The " "the " "an "          ! Articles 0
  185.      "The " "the " "some "   "The " "the " "some ";       ! Articles 1
  186.  
  187.                    !             a           i
  188.                    !             s     p     s     p
  189.                    !             m f n m f n m f n m f n                 
  190.  
  191. Array LanguageGNAsToArticles --> 0 0 0 1 1 1 0 0 0 1 1 1;
  192.  
  193. [ LanguageDirection d;
  194.    switch(d)
  195.    {   n_to: print "north";
  196.        s_to: print "south";
  197.        e_to: print "east";
  198.        w_to: print "west";
  199.        ne_to: print "northeast";
  200.        nw_to: print "northwest";
  201.        se_to: print "southeast";
  202.        sw_to: print "southwest";
  203.        u_to: print "up";
  204.        d_to: print "down";
  205.        in_to: print "in";
  206.        out_to: print "out";
  207.        default: return RunTimeError(9,d);
  208.    }
  209. ];
  210.  
  211. [ LanguageNumber n f;
  212.   if (n==0)    { print "zero"; rfalse; }
  213.   if (n<0)     { print "minus "; n=-n; }
  214.   if (n>=1000) { print (LanguageNumber) n/1000, " thousand"; n=n%1000; f=1; }
  215.   if (n>=100)  { if (f==1) print ", ";
  216.                  print (LanguageNumber) n/100, " hundred"; n=n%100; f=1; }
  217.   if (n==0) rfalse;
  218.   #ifndef DIALECT_US;
  219.   if (f==1) print " and ";
  220.   #ifnot;
  221.   if (f==1) print " ";
  222.   #endif;
  223.   switch(n)
  224.   {   1:  print "one";
  225.       2:  print "two";
  226.       3:  print "three";
  227.       4:  print "four";
  228.       5:  print "five";
  229.       6:  print "six";
  230.       7:  print "seven";
  231.       8:  print "eight";
  232.       9:  print "nine";
  233.       10: print "ten";
  234.       11: print "eleven";
  235.       12: print "twelve";
  236.       13: print "thirteen";
  237.       14: print "fourteen";
  238.       15: print "fifteen";
  239.       16: print "sixteen";
  240.       17: print "seventeen";
  241.       18: print "eighteen";
  242.       19: print "nineteen";
  243.       20 to 99:
  244.           switch(n/10)
  245.           {  2: print "twenty";
  246.              3: print "thirty";
  247.              4: print "forty";
  248.              5: print "fifty";
  249.              6: print "sixty";
  250.              7: print "seventy";
  251.              8: print "eighty";
  252.              9: print "ninety";
  253.           }
  254.           if (n%10 ~= 0) print "-", (LanguageNumber) n%10;
  255.   }
  256. ];
  257.  
  258. [ LanguageTimeOfDay hours mins i;
  259.    i=hours%12;
  260.    if (i==0) i=12;
  261.    if (i<10) print " ";
  262.    print i, ":", mins/10, mins%10;
  263.    if ((hours/12) > 0) print " pm"; else print " am";
  264. ];
  265.  
  266. [ LanguageVerb i;
  267.    if (i==#n$l)        { print "look";              rtrue; }
  268.    if (i==#n$z)        { print "wait";              rtrue; }
  269.    if (i==#n$x)        { print "examine";           rtrue; }
  270.    if (i==#n$i or 'inv' or 'inventory')
  271.                        { print "inventory";         rtrue; }
  272.    rfalse;
  273. ];
  274.  
  275. Constant NKEY__TX     = "N = next subject";
  276. Constant PKEY__TX     = "P = previous";
  277. Constant QKEY1__TX    = "  Q = resume game";
  278. Constant QKEY2__TX    = "Q = previous menu";
  279. Constant RKEY__TX     = "RETURN = read subject";
  280.  
  281. Constant NKEY1__KY    = 'N';
  282. Constant NKEY2__KY    = 'n';
  283. Constant PKEY1__KY    = 'P';
  284. Constant PKEY2__KY    = 'p';
  285. Constant QKEY1__KY    = 'Q';
  286. Constant QKEY2__KY    = 'q';
  287.  
  288. Constant SCORE__TX    = "Score: ";
  289. Constant MOVES__TX    = "Moves: ";
  290. Constant TIME__TX     = "Time: ";
  291. Constant CANTGO__TX   = "You can't go that way.";
  292. Constant FORMER__TX   = "your former self";
  293. Constant YOURSELF__TX = "yourself";
  294. Constant DARKNESS__TX = "Darkness";
  295.  
  296. Constant THOSET__TX   = "those things";
  297. Constant THAT__TX     = "that";
  298. Constant OR__TX       = " or ";
  299. Constant NOTHING__TX  = "nothing";
  300. Constant IS__TX       = " is";
  301. Constant ARE__TX      = " are";
  302. Constant IS2__TX      = "is ";
  303. Constant ARE2__TX     = "are ";
  304. Constant AND__TX      = " and ";
  305. Constant WHOM__TX     = "whom ";
  306. Constant WHICH__TX    = "which ";
  307.  
  308. [ ThatorThose obj;   ! Used in the accusative
  309.   if (obj == player) { print "you"; return; }
  310.   if (obj has pluralname) { print "those"; return; }
  311.   if (obj has animate)
  312.   {   if (obj has female) { print "her"; return; }
  313.       else if (obj hasnt neuter) { print "him"; return; }
  314.   }
  315.   print "that";
  316. ];
  317. [ ItorThem obj;
  318.   if (obj == player) { print "yourself"; return; }
  319.   if (obj has pluralname) { print "them"; return; }
  320.   if (obj has animate)
  321.   {   if (obj has female) { print "her"; return; }
  322.       else if (obj hasnt neuter) { print "him"; return; }
  323.   }
  324.   print "it";
  325. ];
  326. [ IsorAre obj;
  327.   if (obj has pluralname || obj == player) print "are"; else print "is";
  328. ];
  329. [ CThatorThose obj;   ! Used in the nominative
  330.   if (obj == player) { print "You"; return; }
  331.   if (obj has pluralname) { print "Those"; return; }
  332.   if (obj has animate)
  333.   {   if (obj has female) { print "She"; return; }
  334.       else if (obj hasnt neuter) { print "He"; return; }
  335.   }
  336.   print "That";
  337. ];
  338. [ CTheyreorThats obj;
  339.   if (obj == player) { print "You're"; return; }
  340.   if (obj has pluralname) { print "They're"; return; }
  341.   if (obj has animate)
  342.   {   if (obj has female) { print "She's"; return; }
  343.       else if (obj hasnt neuter) { print "He's"; return; }
  344.   }
  345.   print "That's";
  346. ];
  347.  
  348. [ LanguageLM n x1;
  349.   Prompt:  print "^>";
  350.   Miscellany:
  351.            switch(n)
  352.            {   1: "(considering the first sixteen objects only)^";
  353.                2: "Nothing to do!";
  354.                3: print " You have died ";
  355.                4: print " You have won ";
  356.                5: print "^Would you like to RESTART, RESTORE a saved game";
  357.                   #IFDEF DEATH_MENTION_UNDO;
  358.                   print ", UNDO your last move";
  359.                   #ENDIF;
  360.                   if (TASKS_PROVIDED==0)
  361.                       print ", give the FULL score for that game";
  362.                   if (deadflag==2 && AMUSING_PROVIDED==0)
  363.                       print ", see some suggestions for AMUSING things to do";
  364.                   " or QUIT?";
  365.                6: "[Your interpreter does not provide ~undo~.  Sorry!]";
  366.                7: "~Undo~ failed.  [Not all interpreters provide it.]";
  367.                8: "Please give one of the answers above.";
  368.                9: "^It is now pitch dark in here!";
  369.               10: "I beg your pardon?";
  370.               11: "[You can't ~undo~ what hasn't been done!]";
  371.               12: "[Can't ~undo~ twice in succession. Sorry!]";
  372.               13: "[Previous turn undone.]";
  373.               14: "Sorry, that can't be corrected.";
  374.               15: "Think nothing of it.";
  375.               16: "~Oops~ can only correct a single word.";
  376.               17: "It is pitch dark, and you can't see a thing.";
  377.               18: print "yourself";
  378.               19: "As good-looking as ever.";           
  379.               20: "To repeat a command like ~frog, jump~, just say
  380.                    ~again~, not ~frog, again~.";
  381.               21: "You can hardly repeat that.";
  382.               22: "You can't begin with a comma.";
  383.               23: "You seem to want to talk to someone, but I can't see whom.";
  384.               24: "You can't talk to ", (the) x1, ".";
  385.               25: "To talk to someone, try ~someone, hello~ or some such.";
  386.               26: "(first taking ", (the) not_holding, ")";
  387.               27: "I didn't understand that sentence.";
  388.               28: print "I only understood you as far as wanting to ";
  389.               29: "I didn't understand that number.";
  390.               30: "You can't see any such thing.";
  391.               31: "You seem to have said too little!";
  392.               32: "You aren't holding that!";
  393.               33: "You can't use multiple objects with that verb.";
  394.               34: "You can only use multiple objects once on a line.";
  395.               35: "I'm not sure what ~", (address) pronoun_word,
  396.                   "~ refers to.";
  397.               36: "You excepted something not included anyway!";
  398.               37: "You can only do that to something animate.";
  399.               38: #ifdef DIALECT_US;
  400.                   "That's not a verb I recognize.";
  401.                   #ifnot;
  402.                   "That's not a verb I recognise.";
  403.                   #endif;
  404.               39: "That's not something you need to refer to
  405.                    in the course of this game.";
  406.               40: "You can't see ~", (address) pronoun_word,
  407.                   "~ (", (the) pronoun_obj, ") at the moment.";
  408.               41: "I didn't understand the way that finished.";
  409.               42: if (x1==0) print "None";
  410.                   else print "Only ", (number) x1;
  411.                   print " of those ";
  412.                   if (x1==1) print "is"; else print "are";
  413.                   " available.";
  414.               43: "Nothing to do!";
  415.               44: "There are none at all available!";
  416.               45: print "Who do you mean, ";
  417.               46: print "Which do you mean, ";
  418.               47: "Sorry, you can only have one item here. Which exactly?";
  419.               48: print "Whom do you want";
  420.                   if (actor~=player) print " ", (the) actor; print " to ";
  421.                   PrintCommand(); print "?^";
  422.               49: print "What do you want";
  423.                   if (actor~=player) print " ", (the) actor; print " to ";
  424.                   PrintCommand(); print "?^";
  425.               50: print "Your score has just gone ";
  426.                   if (x1 > 0) print "up"; else { x1 = -x1; print "down"; }
  427.                   print " by ", (number) x1, " point";
  428.                   if (x1 > 1) print "s";
  429.               51: "(Since something dramatic has happened,
  430.                    your list of commands has been cut short.)";
  431.               52: "^Type a number from 1 to ", x1,
  432.                   ", 0 to redisplay or press ENTER.";
  433.               53: "^[Please press SPACE.]";
  434.            }
  435.  
  436.   ListMiscellany:
  437.            switch(n)
  438.            {   1: print " (providing light)";
  439.                2: print " (which ", (isorare) x1, " closed)";
  440.                3: print " (closed and providing light)";
  441.                4: print " (which ", (isorare) x1, " empty)";
  442.                5: print " (empty and providing light)";
  443.                6: print " (which ", (isorare) x1, " closed and empty)";
  444.                7: print " (closed, empty and providing light)";
  445.                8: print " (providing light and being worn";
  446.                9: print " (providing light";
  447.               10: print " (being worn";
  448.               11: print " (which ", (isorare) x1, " ";
  449.               12: print "open";
  450.               13: print "open but empty";
  451.               14: print "closed";
  452.               15: print "closed and locked";
  453.               16: print " and empty";
  454.               17: print " (which ", (isorare) x1, " empty)";
  455.               18: print " containing ";
  456.               19: print " (on ";
  457.               20: print ", on top of ";
  458.               21: print " (in ";
  459.               22: print ", inside ";
  460.            }
  461.  
  462.   Pronouns: switch(n)
  463.            {   1: print "At the moment, ";
  464.                2: print "means ";
  465.                3: print "is unset";
  466.                4: "no pronouns are known to the game.";
  467.            }
  468.   Order:          print (The) x1;
  469.                   if (x1 has pluralname) print " have"; else print " has";
  470.                   " better things to do.";
  471.   Quit:    switch(n)
  472.            {   1: print "Please answer yes or no.";
  473.                2: print "Are you sure you want to quit? ";
  474.            }
  475.   Restart: switch(n)
  476.            {   1: print "Are you sure you want to restart? ";
  477.                2: "Failed.";
  478.            }
  479.   Restore: switch(n)
  480.            {   1: "Restore failed.";
  481.                2: "Ok.";
  482.            }
  483.   Save:    switch(n)
  484.            {   1: "Save failed.";
  485.                2: "Ok.";
  486.            }
  487.   Verify:  switch(n)
  488.            {   1: "The game file has verified as intact.";
  489.                2: "The game file did not verify as intact,
  490.                    and may be corrupt.";
  491.            }
  492.   ScriptOn: switch(n)
  493.            {   1: "Transcripting is already on.";
  494.                2: "Start of a transcript of";
  495.                3: "Attempt to begin transcript failed.";
  496.            }
  497.   ScriptOff: switch(n)
  498.            {   1: "Transcripting is already off.";
  499.                2: "^End of transcript.";
  500.                3: "Attempt to end transcript failed.";
  501.            }
  502.   NotifyOn:       "Score notification on.";
  503.   NotifyOff:      "Score notification off.";
  504.   Places:         print "You have visited: ";
  505.   Objects: switch(n)
  506.            {   1: "Objects you have handled:^";
  507.                2: "None.";
  508.                3: print "   (worn)";
  509.                4: print "   (held)";
  510.                5: print "   (given away)";
  511.                6: print "   (in ", (name) x1, ")";
  512.                7: print "   (in ", (the) x1, ")";
  513.                8: print "   (inside ", (the) x1, ")";
  514.                9: print "   (on ", (the) x1, ")";
  515.               10: print "   (lost)";
  516.            }
  517.   Score:          if (deadflag) print "In that game you scored ";
  518.                   else print "You have so far scored ";
  519.                   print score, " out of a possible ", MAX_SCORE,
  520.                   ", in ", turns, " turn";
  521.                   if (turns~=1) print "s"; return;
  522.   FullScore: switch(n)
  523.            {   1: if (deadflag) print "The score was ";
  524.                   else          print "The score is ";
  525.                   "made up as follows:^";
  526.                2: "finding sundry items";
  527.                3: "visiting various places";
  528.                4: print "total (out of ", MAX_SCORE; ")";
  529.            }
  530.   Inv:     switch(n)
  531.            {   1: "You are carrying nothing.";
  532.                2: print "You are carrying";
  533.            }
  534.   Take:    switch(n)
  535.            {   1: "Taken.";
  536.                2: "You are always self-possessed.";
  537.                3: "I don't suppose ", (the) x1, " would care for that.";
  538.                4: print "You'd have to get ";
  539.                   if (x1 has supporter) print "off "; else print "out of ";
  540.                   print_ret (the) x1, " first.";
  541.                5: "You already have ", (thatorthose) x1, ".";
  542.                6: if (noun has pluralname) print "Those seem ";
  543.                   else print "That seems ";
  544.                   "to belong to ", (the) x1, ".";
  545.                7: if (noun has pluralname) print "Those seem ";
  546.                   else print "That seems ";
  547.                   "to be a part of ", (the) x1, ".";
  548.                8: print_ret (Cthatorthose) x1, " ", (isorare) x1,
  549.                   "n't available.";
  550.                9: print_ret (The) x1, " ", (isorare) x1, "n't open.";
  551.               10: if (x1 has pluralname) print "They're ";
  552.                   else print "That's ";
  553.                   "hardly portable.";
  554.               11: if (x1 has pluralname) print "They're ";
  555.                   else print "That's ";
  556.                   "fixed in place.";
  557.               12: "You're carrying too many things already.";
  558.               13: "(putting ", (the) x1, " into ", (the) SACK_OBJECT,
  559.                   " to make room)";
  560.            }
  561.   Drop:    switch(n)
  562.            {   1: if (x1 has pluralname) print (The) x1, " are ";
  563.                   else print (The) x1, " is ";
  564.                   "already here.";
  565.                2: "You haven't got ", (thatorthose) x1, ".";
  566.                3: "(first taking ", (the) x1, " off)";
  567.                4: "Dropped.";
  568.            }
  569.   Remove:  switch(n)
  570.            {   1: if (x1 has pluralname) print "They are"; else print "It is";
  571.                   " unfortunately closed.";
  572.                2: if (x1 has pluralname)
  573.                       print "But they aren't";
  574.                   else print "But it isn't";
  575.                   " there now.";
  576.                3: "Removed.";
  577.            }
  578.   PutOn:   switch(n)
  579.            {   1: "You need to be holding ", (the) x1,
  580.                   " before you can put ", (itorthem) x1,
  581.                   " on top of something else.";
  582.                2: "You can't put something on top of itself.";
  583.                3: "Putting things on ", (the) x1, " would achieve nothing.";
  584.                4: "You lack the dexterity.";
  585.                5: "(first taking ", (itorthem) x1, " off)^";
  586.                6: "There is no more room on ", (the) x1, ".";
  587.                7: "Done.";
  588.                8: "You put ", (the) x1, " on ", (the) second, ".";
  589.            }
  590.   Insert:  switch(n)
  591.            {   1: "You need to be holding ", (the) x1,
  592.                   " before you can put ", (itorthem) x1,
  593.                   " into something else.";
  594.                2: print_ret (Cthatorthose) x1, " can't contain things.";
  595.                3: print_ret (The) x1, " ", (isorare) x1, " closed.";
  596.                4: "You'll need to take ", (itorthem) x1, " off first.";
  597.                5: "You can't put something inside itself.";
  598.                6: "(first taking ", (itorthem) x1, " off)^";
  599.                7: "There is no more room in ", (the) x1, ".";
  600.                8: "Done.";
  601.                9: "You put ", (the) x1, " into ", (the) second, ".";
  602.            }
  603.   EmptyT:  switch(n)
  604.            {   1: print_ret (The) x1, " can't contain things.";
  605.                2: print_ret (The) x1, " ", (isorare) x1, " closed.";
  606.                3: print_ret (The) x1, " ", (isorare) x1, " empty already.";
  607.                4: "That would scarcely empty anything.";
  608.            }
  609.   Give:    switch(n)
  610.            {   1: "You aren't holding ", (the) x1, ".";
  611.                2: "You juggle ", (the) x1,
  612.                   " for a while, but don't achieve much.";
  613.                3: print (The) x1;
  614.                   if (x1 has pluralname) print " don't";
  615.                   else print " doesn't";
  616.                   " seem interested.";
  617.            }
  618.   Show:    switch(n)
  619.            {   1: "You aren't holding ", (the) x1, ".";
  620.                2: print_ret (The) x1, " ", (isorare) x1, " unimpressed.";
  621.            }
  622.   Enter:   switch(n)
  623.            {   1: print "But you're already ";
  624.                   if (x1 has supporter) print "on "; else print "in ";
  625.                   print_ret (the) x1, ".";
  626.                2: if (x1 has pluralname) print "They're"; else print "That's";
  627.                   print " not something you can ";
  628.                   switch (verb_word) {
  629.                       'stand': "stand on.";
  630.                       'sit': "sit down on.";
  631.                       'lie': "lie down on.";
  632.                       default: "enter.";
  633.                   }
  634.                3: "You can't get into the closed ", (name) x1, ".";
  635.                4: "You can only get into something free-standing.";
  636.                5: print "You get ";
  637.                   if (x1 has supporter) print "onto "; else print "into ";
  638.                   print_ret (the) x1, ".";
  639.                6: print "(getting ";
  640.                   if (x1 has supporter) print "off "; else print "out of ";
  641.                   print (the) x1; ")";
  642.                7: if (x1 has supporter) "(getting onto ", (the) x1, ")^";
  643.                   if (x1 has container) "(getting into ", (the) x1, ")^";
  644.                   "(entering ", (the) x1, ")^";
  645.            }
  646.   GetOff:         "But you aren't on ", (the) x1, " at the moment.";
  647.   Exit:    switch(n)
  648.            {   1: "But you aren't in anything at the moment.";
  649.                2: "You can't get out of the closed ", (name) x1, ".";
  650.                3: print "You get ";
  651.                   if (x1 has supporter) print "off "; else print "out of ";
  652.                   print_ret (the) x1, ".";
  653.            }
  654.   VagueGo:       "You'll have to say which compass direction to go in.";
  655.  
  656.   Go:      switch(n)
  657.            {   1: print "You'll have to get ";
  658.                   if (x1 has supporter) print "off "; else print "out of ";
  659.                   print_ret (the) x1, " first.";
  660.                2: "You can't go that way.";
  661.                3: "You are unable to climb ", (the) x1, ".";
  662.                4: "You are unable to descend by ", (the) x1, ".";
  663.                5: "You can't, since ", (the) x1, " ", (isorare) x1,
  664.                   " in the way.";
  665.                6: print "You can't, since ", (the) x1;
  666.                   if (x1 has pluralname) " lead nowhere.";
  667.                   " leads nowhere.";
  668.            }
  669.  
  670.   LMode1:         " is now in its normal ~brief~ printing mode, which gives
  671.                    long descriptions of places never before visited and short
  672.                    descriptions otherwise.";
  673.   LMode2:         " is now in its ~verbose~ mode, which always gives long
  674.                    descriptions of locations
  675.                    (even if you've been there before).";
  676.   LMode3:         " is now in its ~superbrief~ mode, which always gives short
  677.                    descriptions of locations
  678.                    (even if you haven't been there before).";
  679.  
  680.   Look:    switch(n)
  681.            {   1: print " (on ", (the) x1, ")";
  682.                2: print " (in ", (the) x1, ")";
  683.                3: print " (as "; @print_obj x1; print ")";
  684.                4: print "^On ", (the) x1;
  685.                   WriteListFrom(child(x1),
  686.                       ENGLISH_BIT + RECURSE_BIT + PARTINV_BIT
  687.                       + TERSE_BIT + ISARE_BIT + CONCEAL_BIT);
  688.                   ".";
  689.          default: if (x1~=location)
  690.                   {   if (x1 has supporter) print "^On "; else print "^In ";
  691.                       print (the) x1, " you";
  692.                   }
  693.                   else print "^You";
  694.                   print " can ";
  695.                   if (n==5) print "also "; print "see ";
  696.                   WriteListFrom(child(x1),
  697.                       ENGLISH_BIT + WORKFLAG_BIT + RECURSE_BIT
  698.                       + PARTINV_BIT + TERSE_BIT + CONCEAL_BIT);
  699.                   if (x1~=location) ".";
  700.                   " here.";
  701.            }
  702.  
  703.   Examine: switch(n)
  704.            {   1: "Darkness, noun.  An absence of light to see by.";
  705.                2: "You see nothing special about ", (the) x1, ".";
  706.                3: print (The) x1, " ", (isorare) x1, " currently switched ";
  707.                   if (x1 has on) "on."; else "off.";
  708.            }
  709.   LookUnder: switch(n)
  710.            {   1: "But it's dark.";
  711.                2: "You find nothing of interest.";
  712.            }
  713.  
  714.   Search:  switch(n)
  715.            {   1: "But it's dark.";
  716.                2: "There is nothing on ", (the) x1, ".";
  717.                3: print "On ", (the) x1;
  718.                   WriteListFrom(child(x1),
  719.                       TERSE_BIT + ENGLISH_BIT + ISARE_BIT + CONCEAL_BIT);
  720.                   ".";
  721.                4: "You find nothing of interest.";
  722.                5: "You can't see inside, since ", (the) x1, " ",
  723.                   (isorare) x1, " closed.";
  724.                6: print_ret (The) x1, " ", (isorare) x1, " empty.";
  725.                7: print "In ", (the) x1;
  726.                   WriteListFrom(child(x1),
  727.                       TERSE_BIT + ENGLISH_BIT + ISARE_BIT + CONCEAL_BIT);
  728.                   ".";
  729.            }
  730.  
  731.   Unlock:  switch(n)
  732.            {   1: if (x1 has pluralname) print "They don't ";
  733.                   else print "That doesn't ";
  734.                   "seem to be something you can unlock.";
  735.                2: print_ret (ctheyreorthats) x1,
  736.                   " unlocked at the moment.";
  737.                3: if (x1 has pluralname) print "Those don't ";
  738.                   else print "That doesn't ";
  739.                   "seem to fit the lock.";
  740.                4: "You unlock ", (the) x1, ".";
  741.            }
  742.   Lock:    switch(n)
  743.            {   1: if (x1 has pluralname) print "They don't ";
  744.                   else print "That doesn't ";
  745.                   "seem to be something you can lock.";
  746.                2: print_ret (ctheyreorthats) x1, " locked at the moment.";
  747.                3: "First you'll have to close ", (the) x1, ".";
  748.                4: if (x1 has pluralname) print "Those don't ";
  749.                   else print "That doesn't ";
  750.                   "seem to fit the lock.";
  751.                5: "You lock ", (the) x1, ".";
  752.            }
  753.  
  754.   SwitchOn: switch(n)
  755.            {   1: print_ret (ctheyreorthats) x1,
  756.                   " not something you can switch.";
  757.                2: print_ret (ctheyreorthats) x1,
  758.                   " already on.";
  759.                3: "You switch ", (the) x1, " on.";
  760.            }
  761.   SwitchOff: switch(n)
  762.            {   1: print_ret (ctheyreorthats) x1,
  763.                   " not something you can switch.";
  764.                2: print_ret (ctheyreorthats) x1,
  765.                   " already off.";
  766.                3: "You switch ", (the) x1, " off.";
  767.            }
  768.  
  769.   Open:    switch(n)
  770.            {   1: print_ret (ctheyreorthats) x1,
  771.                   " not something you can open.";
  772.                2: if (x1 has pluralname) print "They seem ";
  773.                   else print "It seems ";
  774.                   "to be locked.";
  775.                3: print_ret (ctheyreorthats) x1,
  776.                   " already open.";
  777.                4: print "You open ", (the) x1, ", revealing ";
  778.                   if (WriteListFrom(child(x1),
  779.                       ENGLISH_BIT + TERSE_BIT + CONCEAL_BIT)==0) "nothing.";
  780.                   ".";
  781.                5: "You open ", (the) x1, ".";
  782.            }
  783.  
  784.   Close:   switch(n)
  785.            {   1: print_ret (ctheyreorthats) x1,
  786.                   " not something you can close.";
  787.                2: print_ret (ctheyreorthats) x1,
  788.                   " already closed.";
  789.                3: "You close ", (the) x1, ".";
  790.            }
  791.   Disrobe: switch(n)
  792.            {   1: "You're not wearing ", (thatorthose) x1, ".";
  793.                2: "You take off ", (the) x1, ".";
  794.            }
  795.   Wear:    switch(n)
  796.            {   1: "You can't wear ", (thatorthose) x1, "!";
  797.                2: "You're not holding ", (thatorthose) x1, "!";
  798.                3: "You're already wearing ", (thatorthose) x1, "!";
  799.                4: "You put on ", (the) x1, ".";
  800.            }
  801.   Eat:     switch(n)
  802.            {   1: print_ret (ctheyreorthats) x1,
  803.                   " plainly inedible.";
  804.                2: "You eat ", (the) x1, ". Not bad.";
  805.            }
  806.   Yes, No:        "That was a rhetorical question.";
  807.   Burn:           "This dangerous act would achieve little.";
  808.   Pray:           "Nothing practical results from your prayer.";
  809.   Wake:           "The dreadful truth is, this is not a dream.";
  810.   WakeOther:      "That seems unnecessary.";
  811.   Kiss:           "Keep your mind on the game.";
  812.   Think:          "What a good idea.";
  813.   Smell:          "You smell nothing unexpected.";
  814.   Listen:         "You hear nothing unexpected.";
  815.   Taste:          "You taste nothing unexpected.";
  816.   Touch:   switch(n)
  817.            {   1: "Keep your hands to yourself!";
  818.                2: "You feel nothing unexpected.";
  819.                3: "If you think that'll help.";
  820.            }
  821.   Dig:            "Digging would achieve nothing here.";
  822.   Cut:            "Cutting ", (thatorthose) x1, " up would achieve little.";
  823.   Jump:           "You jump on the spot, fruitlessly.";
  824.   JumpOver, Tie:  "You would achieve nothing by this.";
  825.   Drink:          "There's nothing suitable to drink here.";
  826.   Fill:           "But there's no water here to carry.";
  827.   Sorry:          #ifdef DIALECT_US;
  828.                   "Oh, don't apologize.";
  829.                   #ifnot;
  830.                   "Oh, don't apologise.";
  831.                   #endif;
  832.   Strong:         "Real adventurers do not use such language.";
  833.   Mild:           "Quite.";
  834.   Attack:         "Violence isn't the answer to this one.";
  835.   Swim:           "There's not enough water to swim in.";
  836.   Swing:          "There's nothing sensible to swing here.";
  837.   Blow:           "You can't usefully blow ", (thatorthose) x1, ".";
  838.   Rub:            "You achieve nothing by this.";
  839.   Set:            "No, you can't set ", (thatorthose) x1, ".";
  840.   SetTo:          "No, you can't set ", (thatorthose) x1, " to anything.";
  841.   WaveHands:      "You wave, feeling foolish.";
  842.   Wave:    switch(n)
  843.            {   1: "But you aren't holding ", (thatorthose) x1, ".";
  844.                2: "You look ridiculous waving ", (the) x1, ".";
  845.            }
  846.   Pull, Push, Turn:
  847.            switch(n)
  848.            {   1: if (x1 has pluralname) print "Those are ";
  849.                   else print "It is ";
  850.                   "fixed in place.";
  851.                2: "You are unable to.";
  852.                3: "Nothing obvious happens.";
  853.                4: "That would be less than courteous.";
  854.            }
  855.   PushDir: switch(n)
  856.            {   1: "Is that the best you can think of?";
  857.                2: "That's not a direction.";
  858.                3: "Not that way you can't.";
  859.            }
  860.   Squeeze: switch(n)
  861.            {   1: "Keep your hands to yourself.";
  862.                2: "You achieve nothing by this.";
  863.            }
  864.   ThrowAt: switch(n)
  865.            {   1: "Futile.";
  866.                2: "You lack the nerve when it comes to the crucial moment.";
  867.            }
  868.   Tell:    switch(n)
  869.            {   1: "You talk to yourself a while.";
  870.                2: "This provokes no reaction.";
  871.            }
  872.   Answer, Ask:    "There is no reply.";
  873.   Buy:            "Nothing is on sale.";
  874.   Sing:           "Your singing is abominable.";
  875.   Climb:          "I don't think much is to be achieved by that.";
  876.   Wait:           "Time passes.";
  877.   Sleep:          "You aren't feeling especially drowsy.";
  878.   Consult:        "You discover nothing of interest in ", (the) x1, ".";
  879. ];
  880.  
  881. ! ---------------------------------------------------------------------------
  882.